﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows;
using System.Collections;

namespace AppToolkit.WPF.UI.Converters
{
    /// <summary>
    /// Converts a stringified stacktrace to and array.
    /// </summary>
    public class StackTraceToArrayConverter : IValueConverter
    {
        #region IValueConverter Members

        /// <summary>
        /// Konvertiert einen Wert. 
        /// </summary>
        /// <returns>
        /// Ein konvertierter Wert.Wenn die Methode null zurückgibt, wird der gültige NULL-Wert verwendet.
        /// </returns>
        /// <param name="value">Der von der Bindungsquelle erzeugte Wert.</param><param name="targetType">Der Typ der Bindungsziel-Eigenschaft.</param><param name="parameter">Der zu verwendende Konverterparameter.</param><param name="culture">Die im Konverter zu verwendende Kultur.</param>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var ex = value as string;
            if (ex == null)
                return DependencyProperty.UnsetValue;

            int num2;
            string text = ex;
            var list = new ArrayList();
            for (int i = 0; i < text.Length; i = num2)
            {
                num2 = i;
                while (num2 < text.Length)
                {
                    char ch = text[num2];
                    if ((ch == '\r') || (ch == '\n'))
                    {
                        break;
                    }
                    num2++;
                }
                string str2 = text.Substring(i, num2 - i);
                list.Add(str2);
                if ((num2 < text.Length) && (text[num2] == '\r'))
                {
                    num2++;
                }
                if ((num2 < text.Length) && (text[num2] == '\n'))
                {
                    num2++;
                }
            }
            if ((text.Length > 0) && ((text[text.Length - 1] == '\r') || (text[text.Length - 1] == '\n')))
            {
                list.Add("");
            }
            return (string[])list.ToArray(typeof(string));
        }

        /// <summary>
        /// Konvertiert einen Wert. 
        /// </summary>
        /// <returns>
        /// Ein konvertierter Wert.Wenn die Methode null zurückgibt, wird der gültige NULL-Wert verwendet.
        /// </returns>
        /// <param name="value">Der Wert, der vom Bindungsziel erzeugt wird.</param><param name="targetType">Der Typ, in den konvertiert werden soll.</param><param name="parameter">Der zu verwendende Konverterparameter.</param><param name="culture">Die im Konverter zu verwendende Kultur.</param>
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
        #endregion
    }
}
